home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-08-02 | 3.3 KB | 132 lines | [TEXT/PJMM] |
- unit MenuUtilities;
- interface
- function GetMenu2 (menuID: integer): menuHandle;
- procedure SetUpPopUp (Dlg: DialogPtr;
- nPopUp: integer;
- theMenu: menuHandle);
- function PopUpFilterProc (Dlg: DialogPtr;
- var theEvent: EventRecord;
- var ItemHit: integer): boolean;
- procedure TrackPopUp (Dlg: DialogPtr;
- mMenuID: integer;
- mTitleID: integer;
- theMenu: MenuHandle;
- var menuID, itemID: integer);
- procedure DrawPopUp (Dlg: DialogPtr;
- menuBoxID: integer;
- theMenu: MenuHandle;
- theItem: integer);
- implementation
- {*********************************************}
- function GetMenu2 (menuID: integer): menuHandle;
- begin
- GetMenu2 := MenuHandle(GetResource('MENU', menuID));
- end;
- {***********************************************}
- procedure DrawPopUp;
- var
- itemStr: str255;
- item: handle;
- box: rect;
- itemType: integer;
- info: FontInfo;
- begin
- GetItem(theMenu, theItem, itemStr);
- GetDItem(Dlg, menuBoxID, itemType, item, box);
- GetFontInfo(info);
- EraseRect(box);
- FrameRect(box);
- {drop shadow}
- moveto(box.left + 5, box.bottom);
- lineto(box.right, box.bottom);
- lineto(box.right, box.top + 5);
- moveto(box.left + 10, box.bottom - info.descent - 2);
- DrawString(itemStr);
- end;
- {***********************************************}
- procedure InvertItem (Dlg: DialogPtr;
- whichItem: integer);
- var
- itemType: integer;
- item: handle;
- box: rect;
- begin
- GetDItem(Dlg, whichItem, itemType, item, box);
- InvertRect(box);
- end;
- {***********************************************}
- procedure TrackPopUp;
- var
- result: longint;
- itemType: integer;
- item: handle;
- box: rect;
- begin
- if mTitleID > 0 then
- InvertItem(Dlg, mtitleID);
- InsertMenu(theMenu, -1);
- GetDItem(Dlg, mMenuID, itemType, item, box);
- LocalToGlobal(box.topLeft);
- result := popUpMenuSelect(theMenu, box.top, box.left, itemID);
- menuID := 0;
- if result > 0 then
- begin
- ItemID := loWord(result);
- menuID := hiWord(result);
- DrawPopUp(Dlg, mMenuID, theMenu, itemID);
- end;
- if mTitleID > 0 then
- InvertItem(Dlg, mtitleID);
- end;
- {***********************************************}
- function PopUpFilterProc;
- var
- where: point;
- i: integer;
- itemType: integer;
- item, lastItem: handle;
- box: rect;
- found: boolean;
- begin
- found := false;
- where := theEvent.where;
- GlobalToLocal(where);
-
- i := 0;
- item := nil;
- if (theEvent.what = mouseDown) then
- repeat
- i := i + 1;
- lastItem := item;
- GetDItem(Dlg, i, itemType, item, box);
- if (itemType = UserItem) and PtInRect(where, box) then
- begin
- found := true;
- itemHit := i;
- end;
- until found or (item = lastItem);
- PopUpFilterProc := found;
- end;
- {*************************************************}
- procedure PopUpActionProc (theWindow: WindowPtr;
- itemNo: integer);
- var
- itemType: integer;
- item: handle;
- box: rect;
- begin
- GetDItem(DialogPtr(theWindow), itemNo, itemType, item, box);
- FrameRect(box);
- end;
- {**********************************************************}
- procedure SetUpPopUp;
- var
- itemType: integer;
- item: handle;
- box: rect;
- begin
- GetDItem(Dlg, nPopUp, itemType, item, box);
- {set the procedure for the user item}
- SetDItem(Dlg, nPopUp, itemType, handle(@PopUpActionProc), box);
- end;
- end.